#ifndef MY_SOCKET_H
#define MY_SOCKET_H

#include<string>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<set>
#include <iostream>
#include"PrintInfo.h"

// #define DEBUG 1
// #define LOG 1

#define PORT 6666
#define IP  "192.168.227.128"


using namespace std;

using socketfd=int;



class MyServSocket{
private:
    int port;
    sockaddr_in serv_addr;
    socketfd socket_fd;
    set<socketfd>clients_fd;
    
    //初始化套接字
    void InitSocketfd();

public:

    socketfd GetSocketfd() const;

    /*
        传入参数来进行地址绑定
    */
    MyServSocket(const string& host_addr,int port,int sin_family);


    //关闭文件描述符等资源
    ~MyServSocket();

    //接收用户连接并记录fd,连接错误返回false
    bool AcceptConnection(sockaddr_in&client_addr,socketfd&client_fd);


    //将write_buf中的数据发送给客户端,发送错误返回false
    bool SendToClient(const socketfd& client_fd,const string& write_buf);

    //从客户端接收数据,接收错误返回false，如果断开则关闭资源并返回true
    bool RecieveFromClient(const socketfd& client_fd,string &read_buf);

};



#endif